#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;bool f=0;char ch=getchar();
	while(ch<'0'||ch>'9')f^=(ch=='-'),ch=getchar();
	while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int Maxn=1e6+5,N=5e6+5;

int cnt=1,rt=1;
struct tree{
	int son[2],cnt,res,cost;
}t[N];

int n,len;
char s[Maxn];

void insert(int&p,int now){
	if(!p)p=++cnt;
	if(now>len){
		t[p].cnt++;
		t[p].res=min(t[t[p].son[0]].res,t[t[p].son[1]].res)+1;
		return;
	}
	int ch=(s[now]^48);
	insert(t[p].son[ch],now+1);
	t[p].res=min(t[t[p].son[0]].res,t[t[p].son[1]].res)+1;
}
int ans;
void update(int&p){
	ans++;
	if(t[t[p].son[0]].res<=t[t[p].son[1]].res){
		int x=t[p].son[0];
		if(!x){
			t[p].son[0]=++cnt;x=cnt;
			t[x].res=1;t[x].cnt=1;
			return;
		}
		t[x].cnt++;
		while(t[x].cnt>0)t[x].cnt--,update(x);
	}
	else{
		int x=t[p].son[1];
		if(!x){
			t[p].son[1]=++cnt;x=cnt;
			t[x].res=1;t[x].cnt=1;
			return;
		}
		t[x].cnt++;
		while(t[x].cnt>0)t[x].cnt--,update(x);
	}
	t[p].res=min(t[t[p].son[0]].res,t[t[p].son[1]].res)+1;
}

int tot=0;

void dfs(int p){
	if(!p)return;
	if(!t[p].son[0]&&!t[p].son[1]&&t[p].cnt<=1)return void(tot+=t[p].cnt);
	dfs(t[p].son[0]);dfs(t[p].son[1]);
	while(t[p].cnt>0)t[p].cnt--,update(p);
}

int main(){
	freopen("id.in","r",stdin);
	freopen("id.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++){
		scanf("%s",s+1);
		len=strlen(s+1);
		insert(rt,1);
	}
	dfs(1);
	
//	printf("%d %d\n",n,tot);
	
	printf("%d\n",ans);
	return 0;
}
/*
5
0
01
0011
010
01


3
1
11
111
*/
